package com.ajavaer.framework.im.tencent.model;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public enum TencentImErrorCode {
    E_0(0, "成功"),
    E_6001(6001, "回包解析失败，内部错误，可 提交工单 提供使用接口、错误码、错误信息给客服解决。"),
    E_6003(6003, "批量操作无成功结果，请检查输入列表是否合法（如用户是否存在，传入列表类型是否与 API 匹配）。"),
    E_6004(6004, "会话无效，getConversation 时检查是否已经登录，如未登录获取会话，会有此错误码返回。登录前未设置 IM 模式（winsdk），也会引起此错误。"),
    E_6005(6005, "加载本地消息存储失败，可能存储文件有损坏，可 提交工单 联系客服定位具体问题。"),
    E_6006(6006, "文件传输鉴权失败，可 提交工单 提供使用接口、错误码、错误信息给客服解决。"),
    E_6007(6007, "文件传输获取 Server 列表失败，可 提交工单 提供使用接口、错误码、错误信息给客服解决。"),
    E_6008(6008, "文件传输上传失败，请检查网络是否连接。"),
    E_6009(6009, "文件传输下载失败，请检查网络，或者文件、语音是否已经过期，目前资源文件存储7天。"),
    E_6010(6010, "HTTP 请求失败，可 提交工单 提供使用接口、错误码、错误信息给客服解决。"),
    E_6011(6011, "消息接收方无效，对方用户不存在。可参考如下两种方法解决：先使用接收方帐号登录一次 IM SDK，再重试。先将接收方帐号导入云通信 IM，再重试。导入帐号的具体方法请参考 单个帐号导入接口 或 批量帐号导入接口。"),
    E_6012(6012, "请求超时，请等网络恢复后重试。（Android SDK 1.8.0 以上需要参考 Android 服务进程配置 方式进行配置，否则会出现此错误）。"),
    E_6013(6013, "IM SDK 未初始化或者用户未登录成功，请先登录，成功回调之后重试。"),
    E_6014(6014, "IM SDK 未登录，请先登录，成功回调之后重试，或者被踢下线，可使用 TIMManager getLoginUser 检查当前是否在线。"),
    E_6015(6015, "请做好接口调用控制，第一次 login 操作回调前，后续的 login 操作会返回该错误码。"),
    E_6016(6016, "注册超时，需要重试。"),
    E_6017(6017, "API 参数无效，请检查参数是否符合要求，具体可查看错误信息进一步定义哪个字段。"),
    E_6018(6018, "IM SDK 初始化失败，可能是部分目录无权限。"),
    E_6019(6019, "本地数据库操作失败，可能是部分目录无权限或者数据库文件已损坏。"),
    E_6021(6021, "下载资源文件参数错误，如还未上传成功调用接口下载资源，或者用户自己生成 TIMImage 等对象。"),
    E_6022(6022, "操作本地 IO 错误，检查是否有读写权限，磁盘是否已满。"),
    E_6023(6023, "在登录操作没有完成前进行了登出操作（或者被踢下线）。"),
    E_6150(6150, "TIMFriendshipProxy 没有完成数据同步。"),
    E_6151(6151, "TIMFriendshipProxy 正在进行数据同步。"),
    E_6152(6152, "TIMFriendshpProxy 同步失败。"),
    E_6153(6153, "TIMFriendshipProxy 请求参数不合法。"),
    E_6160(6160, "TIMGroupAssistant 请求字段中包含非预设字段。"),
    E_6161(6161, "TIMGroupAssistant 群资料本地存储没有开启。"),
    E_6162(6162, "从本地加载 TIMGroupAssistant 数据失败。"),
    E_6200(6200, "请求时没有网络，请等网络恢复后重试。"),
    E_6201(6201, "响应时没有网络，请等网络恢复后重试。"),
    E_6205(6205, "网络 service 没有启动或异常，工程需要添加配置，可参考： Android 服务进程配置。"),
    E_6206(6206, "UserSig 过期，需要监听 UserStatusListener，onUserSigExpired 后重新获取 UserSig 登录。"),
    E_6207(6207, "登录校验权限失败，具体查看错误信息。"),
    E_6208(6208, "其他终端登录帐号被踢，需重新登录。"),
    E_6209(6209, "socket 建立失败。"),
    E_7000(7000, "未知错误，内部错误，可 提交工单 提供使用接口、错误码、错误信息给客服解决。"),
    E_114000(114000, "要发送的资源文件不存在。"),
    E_114001(114001, "要发送的资源文件不允许访问。"),
    E_114002(114002, "文件大小超过限制。"),
    E_114003(114003, "用户取消发送，如发送过程中登出等原因。"),
    E_114004(114004, "读取文件内容失败。"),
    E_114005(114005, "资源文件（如图片、文件、语音、视频）传输超时，一般是网络问题导致。"),
    E_114011(114011, "参数非法。"),
    E_115066(115066, "文件 MD5 校验失败。"),
    E_115068(115068, "分片 MD5 校验失败。"),
    E_60002(60002, "HTTP 解析错误 ，请检查 HTTP 请求 URL 格式。"),
    E_60003(60003, "HTTP 请求 JSON 解析错误，请检查 JSON 格式。"),
    E_60004(60004, "请求 URI 或 JSON 包体中 Identifier 或 UserSig 错误。"),
    E_60005(60005, "请求 URI 或 JSON 包体中 Identifier 或 UserSig 错误。"),
    E_60006(60006, "SDKAppID 失效，请核对 SDKAppID 有效性。"),
    E_60007(60007, "REST 接口调用频率超过限制，请降低请求频率。"),
    E_60008(60008, "服务请求超时或 HTTP 请求格式错误，请检查并重试。"),
    E_60009(60009, "请求资源错误，请检查请求 URL。"),
    E_60010(60010, "REST API 请求的 Identifier 字段请填写 App 管理员帐号。"),
    E_60011(60011, "SDKAppID 请求频率超限，请降低请求频率。"),
    E_60012(60012, "REST 接口需要带 SDKAppID，请检查请求 URL 中的 SDKAppID。"),
    E_60013(60013, "HTTP 响应包 JSON 解析错误。"),
    E_60014(60014, "置换帐号超时。"),
    E_60015(60015, "请求包体 Identifier 类型错误，请确认 Identifier 为字符串格式。"),
    E_60016(60016, "SDKAppID 被禁用，请 提交工单 联系客服确认。"),
    E_60017(60017, "请求被禁用，请 提交工单 联系客服确认。"),
    E_60018(60018, "请求过于频繁，请稍后重试。"),
    E_60019(60019, "请求过于频繁，请稍后重试。"),
    E_60020(60020, "未购买套餐包或购买的套餐包正在配置中暂未生效，请五分钟后再次尝试。"),
    E_80001(80001, "文本安全打击，文本中可能包含敏感词汇。"),
    E_80002(80002, "发消息包体过长，目前支持最大8k消息包体长度，请减少包体大小重试。"),
    E_70001(70001, "UserSig 已过期，请重新生成 UserSig，建议 UserSig 有效期不小于24小时。"),
    E_70002(70002, "UserSig 长度为0，请检查传入的 UserSig 是否正确。"),
    E_70003(70003, "UserSig 校验失败，请确认下 UserSig 内容是否被截断，如缓冲区长度不够导致的内容截断。"),
    E_70005(70005, "UserSig 校验失败，可用工具自行验证生成的 UserSig 是否正确。"),
    E_70009(70009, "用公钥验证 UserSig 失败，请确认生成的 UserSig 使用的私钥和 SDKAppID 是否对应。"),
    E_70013(70013, "请求的 Identifier 与生成 UserSig 的 Identifier 不匹配。"),
    E_70014(70014, "请求的 SDKAppID 与生成 UserSig 的 SDKAppID 不匹配。"),
    E_70016(70016, "验证 UserSig 时公钥不存在。请先登录控制台下载私钥，下载私钥的具体方法可参考 下载签名用的私钥。"),
    E_70020(70020, "SDKAppID 未找到，请在云通信 IM 控制台确认应用信息。"),
    E_70052(70052, "UserSig 已经失效，请重新生成，再次尝试。"),
    E_70107(70107, "请求的用户帐号不存在。"),
    E_70114(70114, "安全原因被限制。"),
    E_70169(70169, "服务端内部超时，请重试。"),
    E_70206(70206, "请求中批量数量不合法。"),
    E_70402(70402, "参数非法，请检查必填字段是否填充，或者字段的填充是否满足协议要求。"),
    E_70403(70403, "请求需要 App 管理员权限。"),
    E_70050(70050, "因失败且重试次数过多导致被限制，请检查 UserSig 是否正确，一分钟之后再试。"),
    E_70051(70051, "帐号被拉入黑名单。"),
    E_70398(70398, "创建帐号数量超过免费体验版数量限制，请升级为专业版。"),
    E_70500(70500, "服务器内部错误，请重试。"),
    E_40001(40001, "请求参数错误，请根据错误描述检查请求是否正确。"),
    E_40002(40002, "请求参数错误，没有指定需要拉取资料的用户帐号。"),
    E_40003(40003, "请求的用户帐号不存在。"),
    E_40004(40004, "请求需要 App 管理员权限。"),
    E_40005(40005, "资料字段中包含敏感词。"),
    E_40006(40006, "服务器内部错误，请稍后重试。"),
    E_40007(40007, "没有资料字段的读权限，详情可参见 资料字段。"),
    E_40008(40008, "没有资料字段的写权限，详情可参见 资料字段。"),
    E_40009(40009, "资料字段的 Tag 不存在。"),
    E_40601(40601, "资料字段的 Value 长度超过500字节。"),
    E_40605(40605, "标配资料字段的 Value错误，详情可参见 标配资料字段。"),
    E_40610(40610, "资料字段的 Value 类型不匹配，详情可参见 标配资料字段。"),
    E_30001(30001, "请求参数错误，请根据错误描述检查请求是否正确。"),
    E_30002(30002, "SDKAppID 不匹配。"),
    E_30003(30003, "请求的用户帐号不存在。"),
    E_30004(30004, "请求需要 App 管理员权限。"),
    E_30005(30005, "关系链字段中包含敏感词。"),
    E_30006(30006, "服务器内部错误，请重试。"),
    E_30007(30007, "网络超时，请稍后重试。"),
    E_30008(30008, "并发写导致写冲突，建议使用批量方式。"),
    E_30009(30009, "后台禁止该用户发起加好友请求。"),
    E_30010(30010, "自己的好友数已达系统上限。"),
    E_30011(30011, "分组已达系统上限。"),
    E_30012(30012, "未决数已达系统上限。"),
    E_30013(30013, "黑名单数已达系统上限。"),
    E_30014(30014, "对方的好友数已达系统上限。"),
    E_30515(30515, "请求添加好友时，对方在自己的黑名单中，不允许加好友。"),
    E_30516(30516, "请求添加好友时，对方的加好友验证方式是不允许任何人添加自己为好友。"),
    E_30525(30525, "请求添加好友时，自己在对方的黑名单中，不允许加好友。"),
    E_30539(30539, "A 请求加 B 为好友，B 的加好友验证方式被设置为“AllowType_Type_NeedConfirm”，这时 A 与 B 之间只能形成未决关系，这个返回码用于标识加未决成功，以便与加好友成功的返回码区分开，调用方可以捕捉该错误给用户一个合理的提示。"),
    E_30540(30540, "添加好友请求被安全策略打击，请勿频繁发起添加好友请求。"),
    E_30614(30614, "请求的未决不存在。"),
    E_31707(31707, "删除好友请求被安全策略打击，请勿频繁发起删除好友请求。"),
    E_31804(31804, "请求的用户帐号不存在。"),
    E_50001(50001, "请求的用户帐号不存在。"),
    E_50002(50002, "请求参数错误，请根据错误描述检查请求是否正确。"),
    E_50003(50003, "请求需要 App 管理员权限。"),
    E_50004(50004, "服务器内部错误，请重试。"),
    E_50005(50005, "网络超时，请稍后重试。"),
    E_20001(20001, "请求包非法，请检查发送方和接收方帐号是否存在。"),
    E_20002(20002, "内部鉴权失败。"),
    E_20003(20003, "Identifier 无效或者 Identifier 未导入云通信 IM。"),
    E_20004(20004, "网络异常，请重试。"),
    E_20005(20005, "服务器内部错误，请重试。"),
    E_20006(20006, "触发发送单聊消息之前回调，App 后台返回禁止下发该消息。"),
    E_20007(20007, "发送单聊消息，被对方拉黑，禁止发送。"),
    E_20009(20009, "消息发送双方互相不是好友，禁止发送（配置单聊消息校验好友关系才会出现）。"),
    E_20010(20010, "发送单聊消息，自己不是对方的好友（单向关系），禁止发送。"),
    E_20011(20011, "发送单聊消息，对方不是自己的好友（单向关系），禁止发送。"),
    E_20012(20012, "因禁言，禁止发送消息。"),
    E_20018(20018, "删除漫游内部错误。"),
    E_90001(90001, "JSON 格式解析失败，请检查请求包是否符合 JSON 规范。"),
    E_90002(90002, "JSON 格式请求包中 MsgBody 不符合消息格式描述，或者 MsgBody 不是 Array 类型，请参考 TIMMsgElement 对象 的定义。"),
    E_90003(90003, "JSON 格式请求包体中缺少 To_Account 字段或者 To_Account 字段不是 Integer 类型"),
    E_90005(90005, "JSON 格式请求包体中缺少 MsgRandom 字段或者 MsgRandom 字段不是 Integer 类型"),
    E_90006(90006, "JSON 格式请求包体中缺少 MsgTimeStamp 字段或者 MsgTimeStamp 字段不是 Integer 类型"),
    E_90007(90007, "JSON 格式请求包体中 MsgBody 类型不是 Array 类型，请将其修改为 Array 类型"),
    E_90009(90009, "请求需要 App 管理员权限。"),
    E_90010(90010, "JSON 格式请求包不符合消息格式描述，请参考 TIMMsgElement 对象 的定义。"),
    E_90011(90011, "批量发消息目标帐号超过500，请减少 To_Account 中目标帐号数量。"),
    E_90012(90012, "To_Account 没有注册或不存在，请确认 To_Account 是否导入云通信 IM 或者是否拼写错误。"),
    E_90026(90026, "消息离线存储时间错误（最多不能超过7天）。"),
    E_90031(90031, "JSON 格式请求包体中 SyncOtherMachine 字段不是 Integer 类型"),
    E_90044(90044, "JSON 格式请求包体中 MsgLifeTime 字段不是 Integer 类型"),
    E_90048(90048, "请求的用户帐号不存在。"),
    E_90994(90994, "服务内部错误，请重试。"),
    E_90995(90995, "服务内部错误，请重试。"),
    E_91000(91000, "服务内部错误，请重试。"),
    E_90992(90992, "服务内部错误，请重试；如果所有请求都返回该错误码，且 App 配置了第三方回调，请检查 App 服务器是否正常向云通信 IM 后台服务器返回回调结果。"),
    E_93000(93000, "JSON 数据包超长，消息包体请不要超过8k。"),
    E_91101(91101, "Web 端长轮询被踢（Web 端同时在线实例个数超出限制）。");
    private int code;
    private String message;

    TencentImErrorCode(int code, String message) {
        this.code = code;
        this.message = message;
    }


    public static Map<Integer, TencentImErrorCode> map = new ConcurrentHashMap<>();

    public static TencentImErrorCode parse(Integer code) {
        if (map.isEmpty()) {
            for (TencentImErrorCode value : TencentImErrorCode.values()) {
                map.put(value.getCode(), value);
            }
        }
        return map.get(code);
    }

    public int getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}
